home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 August (Alt) / CHIP 2005-08.1.iso / program / guvenlik / syslinux-3.07.exe / libfat / fat.h < prev    next >
Encoding:
C/C++ Source or Header  |  2004-12-15  |  3.6 KB  |  113 lines

  1. #ident "$Id: fat.h,v 1.1 2004/12/15 10:14:39 hpa Exp $"
  2. /* ----------------------------------------------------------------------- *
  3.  *   
  4.  *   Copyright 2001-2004 H. Peter Anvin - All Rights Reserved
  5.  *
  6.  *   This program is free software; you can redistribute it and/or modify
  7.  *   it under the terms of the GNU General Public License as published by
  8.  *   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
  9.  *   Boston MA 02111-1307, USA; either version 2 of the License, or
  10.  *   (at your option) any later version; incorporated herein by reference.
  11.  *
  12.  * ----------------------------------------------------------------------- */
  13.  
  14. /*
  15.  * fat.h
  16.  *
  17.  * Basic data structures for a FAT filesystem
  18.  */
  19.  
  20. #ifndef FAT_H
  21. #define FAT_H
  22.  
  23. #include "ulint.h"
  24.  
  25. /* The poor excuse FAT has for a superblock -- in the boot sector */
  26. struct fat_bootsect {
  27.   le8_t bsJump[3];        /* Jump to code */
  28.   char bsOemName[8];        /* Formatting program */
  29.   le16_t bsBytesPerSec;        /* Bytes/sector */
  30.   le8_t bsSecPerClust;        /* Sectors/cluster */
  31.   le16_t bsResSectors;        /* Reserved sectors */
  32.   le8_t bsFATs;            /* Number of FATs */
  33.   le16_t bsRootDirEnts;        /* Number of entries/root directory */
  34.   le16_t bsSectors;        /* Number of sectors [1] */
  35.   le8_t bsMedia;        /* Magic media type byte */
  36.   le16_t bsFATsecs;        /* Sectors/FAT */
  37.   le16_t bsSecPerTrack;        /* Sectors/track */
  38.   le16_t bsHeads;        /* Number of heads */
  39.   le32_t bsHiddenSecs;        /* Number of hidden sectors */
  40.   le32_t bsHugeSectors;        /* Number of sectors [2] */
  41.   union {
  42.     /* FAT12/16 */
  43.     struct {
  44.       le8_t bsDriveNumber;    /* Drive number */
  45.       le8_t bsReserved1;    /* Reserved */
  46.       le8_t bsBootSignature;    /* 0x29 */
  47.       le32_t bsVolumeID;    /* Volume serial number */
  48.       char bsVolumeLabel[11];    /* Volume name */
  49.       char bsFileSysType[8];    /* File system type */
  50.   
  51.       le8_t bsCode[448];    /* Boot sector code */
  52.     } fat16;
  53.     
  54.     /* FAT32 */
  55.     struct {
  56.       le32_t bpb_fatsz32;    /* Sectors/FAT */
  57.       le16_t bpb_extflags;    /* Extended flags */
  58.       le16_t bpb_fsver;        /* Filesystem version */
  59.       le32_t bpb_rootclus;    /* Root directory cluster */
  60.       le16_t bpb_fsinfo;    /* FSINFO sector number */
  61.       le16_t bpb_bkbootsec;    /* Backup boot sector (superblock) */
  62.       char bpb_reserved[12];
  63.  
  64.       /* Same shit, different offset! */
  65.       le8_t bsDriveNumber;    /* Drive number */
  66.       le8_t bsReserved1;    /* Reserved */
  67.       le8_t bsBootSignature;    /* 0x29 */
  68.       le32_t bsVolumeID;    /* Volume serial number */
  69.       char bsVolumeLabel[11];    /* Volume name */
  70.       char bsFileSysType[8];    /* File system type */
  71.  
  72.       le8_t bsCode[420];    /* Boot sector code */
  73.     } fat32;
  74.   } u;
  75.  
  76.   le16_t bsSignature;        /* 0xAA55 */
  77. };
  78.  
  79. #define BS_BOOTSIGNATURE    0x29
  80. #define BS_SIGNATURE        0xAA55
  81.  
  82. /* A FAT filesystem directory entry */
  83.  
  84. struct fat_dirent
  85. {
  86.   le8_t name[11];        /* Mangled filename */
  87.   le8_t attribute;        /* File type/attribute */
  88.   le8_t caseflags;            /* VFAT: case for basis and extension */
  89.   le8_t ctime_ms;        /* ms of creation time */
  90.   le32_t ctime;            /* Creation time */
  91.   le16_t atime;            /* Date portion (high 16 bits) of atime */
  92.   le16_t clusthi;        /* FAT32: high 16 bits of cluster */
  93.   le32_t mtime;            /* Modification time */
  94.   le16_t clustlo;        /* First cluster pointer */
  95.   le32_t size;            /* File size (bytes) */
  96. };
  97.  
  98. /* A VFAT filesystem continuation entry */
  99. struct fat_vfat_slot
  100. {
  101.   le8_t  id;            /* Sequence number for slot */
  102.   le16_t name0[5];        /* 5 characters */
  103.   le8_t  attribute;        /* Attribute byte */
  104.   le8_t  reserved;        /* Reserved, MBZ */
  105.   le8_t  alias_csum;        /* Short name checksum */
  106.   le16_t name5[6];        /* 6 characters */
  107.   le16_t firstclust;        /* MBZ */
  108.   le16_t name11[2];        /* 2 characters */
  109. };
  110.  
  111. #endif /* FAT_H */
  112.  
  113.